/***********************************************************
 * Matlab Printer Library
 * Programmers:
 *		Cory Frey
 *		Kendra Konopka
 *		Charles Leichner
 *		Andrew Weatherly
 *
 * Date:
 *		6 December 2010
 *
 * Description:
 *		This library includes functions that will generate an
 *		output file that can be run in Matlab. All of the 
 *		functions detailed in the Matrix.h library are 
 *		implemented.
 *
 ***********************************************************/

#include <fstream>
#include <queue>

class MatlabPrinter {
public:
	MatlabPrinter(const char*);
	virtual ~MatlabPrinter();
	static void inputMatrix(Elements, std::string);
	static void scalarMultiply(double, Matrix);
	static void matrixAddition(Matrix, Matrix);
	static void matrixSubtraction(Matrix, Matrix);
	static void unaryMinus(Matrix);
	static void equalityCheck(Matrix, Matrix);
	static void inequalityCheck(Matrix, Matrix);
	static void matrixMultiply(Matrix, Matrix);
	static void matrixPower(Matrix, double);
	static void determinant(Matrix);
	static void inverse(Matrix);
	static void eigenValues(Matrix);
	static void eigenVectors(Matrix);
	static void echelon(Matrix);
	static void LUFactorization(Matrix);
	static void QRFactorization(Matrix);
	static void transpose(Matrix);
	static void identity(int);
	static void trace(Matrix);
	void writeToFile();

protected:
	std::ofstream outputFile;
	static std::queue<std::string> outputQueue;

};
